iT邦幫忙

2025 iThome 鐵人賽

DAY 10
0
Security

江湖在走,數位憑證要懂,懂得天天吃滷肉飯系列 第 10

第10天,X.509 與 ASN.1 / 夯・魯肉飯(台北信義) | 30天滷肉飯

  • 分享至 

  • xImage
  •  

在談論數位憑證時,最常聽到的標準就是 X.509。這個標準幾乎是所有 SSL/TLS、HTTPS、VPN、電子簽章與 PKI 系統的基礎。但如果深入看一張憑證的內容,就會發現它是一大堆二進位或 Base64 的編碼資料。這些資料究竟是如何被描述、解析並且互通的呢?答案就是 ASN.1

什麼是 X.509?

  • 起源:X.509 是由 ITU-T(國際電信聯盟電信標準化部門)在 1988 年制定的標準,最初是為了電子目錄(X.500 系列)服務設計的。

  • 用途:它規範了憑證的結構,定義了憑證內應該包含哪些欄位,以及如何驗證信任鏈。

  • 核心內容

    • 版本 (Version):V1、V2、V3,現在幾乎都使用 V3。
    • 序號 (Serial Number):由 CA 指派,用於唯一識別。
    • 簽章演算法 (Signature Algorithm):例如 SHA-256 with RSA。
    • 發行者 (Issuer):簽發憑證的 CA。
    • 主體 (Subject):憑證屬於誰(例如 domain.com)。
    • 有效期限 (Validity):Not Before / Not After。
    • 主體公鑰資訊 (Subject Public Key Info):使用者的公鑰。
    • 擴展欄位 (Extensions):V3 引入,例如 Key Usage、Subject Alternative Name (SAN)。

簡單來說,X.509 就像是「數位身分證規格」,它規定了憑證應該有哪些欄位,以及這些欄位如何互相搭配。

ASN.1:憑證的語言

那麼 X.509 憑證裡這些欄位是怎麼被精確描述的?這就需要 ASN.1(Abstract Syntax Notation One)

  • 定義:ASN.1 是一種標準化的描述語言,用於定義資料的結構,讓不同平台、語言、系統都能用一致方式解讀。

  • 特色

    • 是一種「抽象語法」:不管你在 C、Java、Go、.NET,都可以用 ASN.1 的規範來互通。
    • 有多種編碼規則:常見的有 DER(Distinguished Encoding Rules)與 BER(Basic Encoding Rules)。其中 DER 是憑證必用的格式,因為它是唯一、確定性的編碼,避免歧義。
  • 範例:以 ASN.1 定義的憑證結構 (簡化版):

    Certificate  ::=  SEQUENCE  {
         tbsCertificate       TBSCertificate,
         signatureAlgorithm   AlgorithmIdentifier,
         signatureValue       BIT STRING
    }
    

    這裡可以看到憑證是由三部分組成:

    1. TBSCertificate:要簽署的資料(包含版本、序號、主體、公鑰等)。
    2. signatureAlgorithm:簽名演算法。
    3. signatureValue:CA 用私鑰簽出來的值。

X.509 與 ASN.1 的關係

  • X.509:規範「憑證要有哪些欄位」。
  • ASN.1:規範「這些欄位用什麼方式描述」。
  • DER:規範「最終如何把 ASN.1 描述轉成二進位」。
  • PEM:則是「把 DER 轉成 Base64 文字並加上標頭,方便傳輸與使用」

打個比方:

  • X.509 是「表格設計」:欄位要有姓名、生日、身分證字號。
  • ASN.1 是「表格語法」:告訴你姓名是字串、生日是日期、身分證字號是整數。
  • DER 是「表格輸出檔案格式」:最後用一套固定方法把表格輸出成電腦能讀的二進位檔案。

實際例子:看懂一張憑證

一張常見的憑證會長這樣(Base64 編碼後):

-----BEGIN CERTIFICATE-----
MIIDXTCCAkWgAwIBAgIJAK1l7...
-----END CERTIFICATE-----

如果用工具(例如 openssl x509 -in cert.pem -text -noout)解開,就能看到裡面的欄位。這些欄位就是根據 X.509 標準定義的,而它們的底層結構正是用 ASN.1 + DER 編碼的。

為什麼要懂 ASN.1 與 X.509?

  1. 排錯能力:當憑證有問題(例如解析失敗),常常是 ASN.1 編碼錯誤或 DER 格式不符合規範。
  2. 安全研究:憑證攻擊(如 OpenSSL 的 ASN.1 parsing bug)往往源自解析 ASN.1 的實作問題。
  3. 開發應用:在寫程式處理憑證(例如驗證簽章、解析 SAN)時,需要理解它的底層結構。

ASN.1 JavaScript decoder

不管是憑證、公鑰、私鑰、PKCS7,都是 ASN.1 格式,可以透過線上的 ASN.1 JavaScript decoder 來進行解碼,並觀察其中的結構。

https://ithelp.ithome.com.tw/upload/images/20250924/20163416UI5YFRXQR3.png

夯・魯肉飯

  • 店名:夯・魯肉飯
  • 地址:台北市信義區松山路152號
  • 營業時間:每日 11:30–21:00
  • Google Maps
  • 本系列地圖

https://ithelp.ithome.com.tw/upload/images/20250924/20163416oIRnCDAUzh.jpg

裝潢文青的滷肉飯,口味不錯,好吃,信義松山附近評價高的滷肉飯

https://ithelp.ithome.com.tw/upload/images/20250924/201634163XBZHwTQNy.jpg


上一篇
第9天,政府機關公開金鑰基礎建設 GPKI / 大碗公當歸羊肉(新北板橋)| 30天滷肉飯
系列文
江湖在走,數位憑證要懂,懂得天天吃滷肉飯10
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言